package com.feinno.urcs.group.api;

import com.feinno.urcs.group.entity.GroupOfflineMessageIndex;
import com.feinno.urcs.group.entity.GroupOfflineMessageType;
import com.feinno.urcs.group.entity.GroupTextOfflineMessage;
import com.feinno.urcs.types.MobileNo;
import org.helium.framework.annotations.ServiceInterface;

import java.util.List;

/**
 * @author Li.Hongbo <lihongbo@feinno.com>
 *         用于群离线消息的存取，也负责离线invite 的存取。
 */
@ServiceInterface(id = "group:GroupOfflineMessageService")
public interface GroupOfflineMessageService {
    /**
     * 保存离线消息,同时带有离线消息append 的能力.
     * 先判断有没有离线消息,如果没有,需要先创建 messagebase表记录, 然后创建群离线消息索引表的.<br/>
     * 如果已经有离线消息, 并且本消息的id 要比之前离线消息的大, 则放弃本次请求.
     * 如果已经有离线消息, 本消息的id比之前的离线消息id小, "我了个擦.. 这个不应该啊" 不知道该怎么办
     *
     * @param receiver       接受者
     * @param groupId        群id
     * @param groupMessageId 群消息的id , 来自于消息持久化服务, 仅用作消息的排序,与离线偏移量存储, 不对客户端下行.
     */
    public void saveOfflineTextMessage(MobileNo receiver, int groupId, long groupMessageId);

    /**
     * 保存邀请, 记录邀请加入的信令.
     *
     * @param receiver 接受者
     * @param groupId  群id
     * @param referBy  发起者
     */
    public void saveInvite(MobileNo receiver, int groupId, MobileNo referBy);

    public List<GroupTextOfflineMessage> getOfflineTextMessage(MobileNo receiver, int groupId, int maxSize);

    /**
     * 是否有离线, 用于快速查询.
     *
     * @param receiver
     * @param groupId
     * @return
     */
    public boolean hasOfflineMessage(MobileNo receiver, int groupId, GroupOfflineMessageType type);

    public void deliveredTextMessage(MobileNo memberMobile, int groupId, GroupTextOfflineMessage offlineMessage);

    public void deliveredInvite(MobileNo memberMobile, int groupId);
    public void deliveredInvite(GroupOfflineMessageIndex messageIndex);
    public GroupOfflineMessageIndex getOfflineMessageIndexByMessageBaseId(String messageBaseId);

    public void cleanOfflineMessageIndex(MobileNo memberMobile, int groupId, GroupOfflineMessageType type);

    public void sendFail(GroupOfflineMessageIndex offlineMessageIndex);

}
